package com.xueyi.workflow.service;

import com.xueyi.common.core.web.page.TableDataInfo;
import com.xueyi.workflow.domain.dto.WfProcessTaskDto;
import com.xueyi.workflow.domain.dto.SubmitApprovalRequest;
import com.xueyi.workflow.domain.query.WfProcessTaskQuery;
import com.xueyi.workflow.domain.vo.NextNodeInfo;

import java.util.List;
import java.util.Map;

/**
 * 流程任务Service接口
 *
 * @author xueyi
 * @date 2024-07-03
 */
public interface IWfProcessTaskService {

    /**
     * 查询我的任务列表
     */
    TableDataInfo<WfProcessTaskDto> getMyTasks(WfProcessTaskQuery query);

    /**
     * 查询任务详情
     */
    WfProcessTaskDto getTaskDetail(String taskId);

    /**
     * 认领任务
     */
    Boolean claimTask(String taskId);

    /**
     * 取消认领任务
     */
    Boolean unclaimTask(String taskId);

    /**
     * 委派任务
     */
    Boolean delegateTask(String taskId, String assignee);

    /**
     * 转办任务
     */
    Boolean transferTask(String taskId, String assignee);

    /**
     * 提交审核
     */
    Boolean submitApproval(SubmitApprovalRequest request);

    /**
     * 获取下一步节点数据
     */
    List<NextNodeInfo> getNextNodes(String taskId, String processInstanceId, Map<String, Object> formData);

    /**
     * 获取发起流程的下一步节点数据
     */
    List<NextNodeInfo> getNextNodesForStart(String processId, String processKey, Map<String, Object> formData);

    /**
     * 获取工作台任务
     */
    List<WfProcessTaskDto> getWorkbenchTasks(Integer limit);

    /**
     * 查询工作台任务列表
     */
    List<WfProcessTaskDto> getWorkbenchTasks();

    /**
     * 查询任务历史列表
     */
    TableDataInfo<WfProcessTaskDto> getTaskHistoryList(WfProcessTaskQuery query);

    /**
     * 获取流程实例的节点状态
     */
    List<WfProcessTaskDto> getNodeStatus(String processInstanceId);
    
    /**
     * 根据任务ID获取当前任务节点的配置信息
     * 包括节点基本信息、人员配置、权限配置等
     */
    NextNodeInfo getCurrentTaskNodeConfig(String taskId);
} 